<?php
// +----------------------------------------------------------------------
// |
// +----------------------------------------------------------------------
// |
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// |
// +----------------------------------------------------------------------

// +----------------------------------------------------------------------
// | 后台首页
// +----------------------------------------------------------------------
namespace app\admin\controller;

use app\admin\model\AdminUser;
use app\admin\service\User;
use app\common\controller\Adminbase;
use app\model\DistributionSetting;
use libs\Redis;
use think\captcha\Captcha;
use think\Db;
use think\facade\Cache;

class Index extends Adminbase
{
    //后台首页
    public function index()
    {
        $title = \app\admin\model\Config::where('name', 'web_site_title')->value('value');
        $index_url   = url('main/index');
        $partner_url = '';
        $is_agent = false;
        if (!IS_ROOT) {
            $index_url = url('main/agent');
            if (User::instance()->isAgent()) {
                $is_agent = true;
                $value = DistributionSetting::where('uuid', 'partner')->value('value');
                if ($value) {
                    $value = json_decode($value, true);
                    $partner_url = $value['url'] ?? '';
                    if (!empty($value['title'])) {
                        $title = $value['title'];
                    }
                }
            }
        }
        try {
            $menu = json_encode(model("admin/Menu")->getMenuList());
        } catch (\Exception $e) {
            $this->error($e->getMessage(), url('admin/index/login'));
            exit;
        }
        $this->assign('userInfo', $this->_userinfo);
        $this->assign("SUBMENU_CONFIG", $menu);
        $this->assign("title", $title);
        $this->assign("is_admin", IS_ROOT);
        $this->assign("is_agent", $is_agent);
        $this->assign("index_url", $index_url);
        $this->assign("partner_url", $partner_url);
        return $this->fetch();
    }

    //登录判断
    public function login()
    {
        if (User::instance()->isLogin()) {
            $this->redirect('admin/index/index');
        }
        if ($this->request->isPost()) {
            $data = $this->request->post();
            //验证码
            if (!captcha_check($data['verify'])) {
                $this->error('验证码输入错误！');
                return false;
            }
            // 验证数据
            $rule   = [
                'username|用户名' => 'require|alphaDash|length:3,20',
                'password|密码'   => 'require|length:3,20',
            ];
            $result = $this->validate($data, $rule);
            if (true !== $result) {
                $this->error($result);
            }
            $AdminUser = new AdminUser;
            if ($AdminUser->login($data['username'], $data['password'])) {
                $this->success('恭喜您，登陆成功', url('admin/index/index'));
            } else {
                $this->error("用户名或者密码错误，登陆失败！", url('admin/index/login'));
            }

        } else {
            $title = str_contains($this->request->url(), 'agent.php') ? '团长后台管理' : '后台管理';
            $this->assign('title', $title);
            return $this->fetch();
        }

    }

    //手动退出登录
    public function logout()
    {
        if (User::instance()->logout()) {
            //手动登出时，清空forward
            //cookie("forward", NULL);
            $this->success('注销成功！', url("admin/index/login", ['token' => $this->token]));
        }
    }

    //缓存更新
    public function cache()
    {
        //清除缓存
        $admin_user_auth      = ADMIN_USER_AUTH_KEY;
        $admin_user_auth_sign = ADMIN_USER_AUTH_SIGN_KEY;
        $redis                = Redis::getRedis();
        $keys                 = config('redis_keys');
        $no_del_keys          = [$admin_user_auth, $admin_user_auth_sign, 'auth'];
        foreach ($keys as $key) {
            if (!in_array($key, $no_del_keys)) {
                $redis->del($key);
            }
        }

        $type = $this->request->request("type");
        switch ($type) {
            case 'data' || 'all':
                \util\File::del_dir(ROOT_PATH . 'runtime' . DIRECTORY_SEPARATOR . 'cache');
                Cache::clear();
                if ($type == 'content') {
                    break;
                }

            case 'template' || 'all':
                \util\File::del_dir(ROOT_PATH . 'runtime' . DIRECTORY_SEPARATOR . 'temp');
                if ($type == 'template') {
                    break;
                }
        }
        $this->success('清理缓存');
    }

    //验证码
    public function verify()
    {
        $captcha           = new Captcha();
        $captcha->length   = 4;
        $captcha->codeSet  = '123456789';
        $captcha->useCurve = false;
        $captcha->useNoise = false;
        return $captcha->entry();
    }

}
